/*
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * The Original Code is ST_EXT-S_UIMAST.
 *
 * The Initial Developer of the Original Code is
 * University of Rome, Tor Vergata
 * Portions created by the Initial Developer are Copyright (C) 2009
 * the Initial Developer. All Rights Reserved.
 */

package it.uniroma2.art.uimast.xpts;

import it.uniroma2.art.uimast.impl.types.BooleanVariant;
import it.uniroma2.art.uimast.impl.types.ByteVariant;
import it.uniroma2.art.uimast.impl.types.DoubleVariant;
import it.uniroma2.art.uimast.impl.types.EnumeratedVariant;
import it.uniroma2.art.uimast.impl.types.FloatVariant;
import it.uniroma2.art.uimast.impl.types.IntVariant;
import it.uniroma2.art.uimast.impl.types.LongVariant;
import it.uniroma2.art.uimast.impl.types.ShortVariant;
import it.uniroma2.art.uimast.impl.types.StringVariant;

/**
 * An object able to visit instances of the class {@link IVariantVisitable}.
 * 
 * @author <a href="mailto:manuel.fiorelli@gmail.com">Manuel Fiorelli</a>
 */
public interface IVariantVisitor {
	/**
	 * Visits an instance of {@link BooleanVariant}.
	 * 
	 * @param booleanvariant
	 *            a <code>BooleanVariant</code>
	 */
	public abstract void visit(BooleanVariant booleanvariant);

	/**
	 * Visits an instance of {@link ByteVariant}.
	 * 
	 * @param booleanvariant
	 *            a <code>ByteVariant</code>
	 */
	public abstract void visit(ByteVariant bytevariant);

	/**
	 * Visits an instance of {@link ShortVariant}.
	 * 
	 * @param booleanvariant
	 *            a <code>ShortVariant</code>
	 */
	public abstract void visit(ShortVariant shortvariant);

	/**
	 * Visits an instance of {@link IntVariant}.
	 * 
	 * @param booleanvariant
	 *            a <code>IntVariant</code>
	 */
	public abstract void visit(IntVariant intvariant);

	/**
	 * Visits an instance of {@link LongVariant}.
	 * 
	 * @param booleanvariant
	 *            a <code>LongVariant</code>
	 */
	public abstract void visit(LongVariant longvariant);

	/**
	 * Visits an instance of {@link FloatVariant}.
	 * 
	 * @param booleanvariant
	 *            a <code>FloatVariant</code>
	 */
	public abstract void visit(FloatVariant floatvariant);

	/**
	 * Visits an instance of {@link DoubleVariant}.
	 * 
	 * @param booleanvariant
	 *            a <code>DoubleVariant</code>
	 */
	public abstract void visit(DoubleVariant doublevariant);

	/**
	 * Visits an instance of {@link StringVariant}.
	 * 
	 * @param booleanvariant
	 *            a <code>StringVariant</code>
	 */
	public abstract void visit(StringVariant stringvariant);

	/**
	 * Visits an instance of {@link EnumeratedVariant}.
	 * 
	 * @param booleanvariant
	 *            a <code>EnumeratedVariant</code>
	 */
	public abstract void visit(EnumeratedVariant enumeratedvariant);
}
